/***************************************************
> Copyright (C) 2024 ==KINGYI== All rights reserved.
> File Name: 1.c
> Author:cjy
> Mail: 
> Created Time: 2024年08月07日 星期三 11时22分16秒
***************************************************/
//设计一个拷贝文件的线程函数
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <dirent.h>
typedef struct File{
	char src[50];
	char dst[50];
}FIL;


//void copyFile(char *src, char *dst);
void copyFile(char *src, char *dst) {
    int fd = 0, fb = 0;
    char buffer[1024];
    ssize_t ret = 0;

    // 打开源文件
    fd = open(src, O_RDONLY);
    if (fd == -1) {
        perror("open source file");
        exit(-1);
    }

    // 打开目标文件
    fb = open(dst, O_RDWR | O_CREAT | O_TRUNC, 0640);
    if (fb == -1) {
        perror("open destination file");
        close(fd);
	exit(-1);
    }

    // 读取和写入数据
    while ((ret = read(fd, buffer, sizeof(buffer))) > 0) {
        if (write(fb, buffer, ret) != ret) {
            perror("write");
            close(fd);
            close(fb);
	    exit(-1);
        }
    }

    if (ret == -1) {
        perror("read");
    } else if (ret == 0) {
        // 文件读取完成
	printf("ok");
    }

    // 关闭文件描述符
    close(fd);
    close(fb);
}




void *copyfile(void *arg){
	FIL *p = (FIL *)arg;
	copyFile(p->src,p->dst);
}



int main(int argc,const char* argv[])
{
	pthread_t tid = 0;
	int ret = 0;
	FIL file;
	printf("请输入你想拷贝的文件:");
	scanf("%s",file.src);	
	printf("请输入你想拷到目标的文件:");
	scanf("%s",file.dst);
	ret = pthread_create(&tid,NULL,copyfile,&file);
	pthread_join(tid,NULL);
    return 0;
}




















